﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using QLTuyenXe.DAL;
using System.Data;
using QLTuyenXe.DAO;

namespace QLTuyenXe.BLL
{
    class BTuyenXe
    {
        MyConnectUnit myConnU = new MyConnectUnit();
        /// <summary>
        /// Đọc dữ liệu từ bảng Loại sách trong CSDL
        /// </summary>
        /// <param name="columns">Danh sách các cột cần đọc, cách nhau bởi dấu phẩy(,)</param>
        /// <param name="condition">Điều kiện đọc</param>
        /// <param name="order">Điều kiện sắp xếp: ASC: Tăng dần, DESC: Giảm dần</param>
        
        //Tìm kiếm tuyến xe đang hoạt động
        public ArrayList SelectTX(String condition, String condition1)
        {
            ArrayList tuyenxes = new ArrayList();
            DataTable tb = new DataTable();

            tb = myConnU.SelectTX("DIEU_HANH", "QUAN_LY_XE", "TUYEN_XE", "TUYEN_XE.matuyenxe", "TUYEN_XE.tentuyen", "QUAN_LY_XE.bienso", "TUYEN_XE.dodai", "TUYEN_XE.giave", "QUAN_LY_XE.maxe = DIEU_HANH.maxe", "DIEU_HANH.matuyenxe = TUYEN_XE.matuyenxe", condition, condition1);
            if (tb != null)
                foreach (DataRow r in tb.Rows)
                {
                    TX tx = new TX();
                    tx.Ma = (r["matuyenxe"].ToString());
                    tx.Ten = (r["tentuyen"].ToString());
                    tx.Bienso = (r["bienso"].ToString());
                    tx.Dodai = (r["dodai"].ToString());
                    tx.Giave = (r["giave"].ToString());
                    tuyenxes.Add(tx);
                }
            return tuyenxes;
        }


        //Các tuyến xe đang hoạt động
        public ArrayList SelectTX(String condition)
        {
            ArrayList tuyenxes = new ArrayList();
            DataTable tb = new DataTable();

            tb = myConnU.SelectTXs("DIEU_HANH", "QUAN_LY_XE", "TUYEN_XE", "TUYEN_XE.matuyenxe", "TUYEN_XE.tentuyen", "QUAN_LY_XE.bienso", "TUYEN_XE.dodai", "TUYEN_XE.giave", "QUAN_LY_XE.maxe = DIEU_HANH.maxe", "DIEU_HANH.matuyenxe = TUYEN_XE.matuyenxe", condition);
            if (tb != null)
                foreach (DataRow r in tb.Rows)
                {
                    TX tx = new TX();
                    tx.Ma = (r["matuyenxe"].ToString());
                    tx.Ten = (r["tentuyen"].ToString());
                    tx.Bienso = (r["bienso"].ToString());
                    tx.Dodai = (r["dodai"].ToString());
                    tx.Giave = (r["giave"].ToString());
                    tuyenxes.Add(tx);
                }
            return tuyenxes;
        }

        public ArrayList Select(String columns, String condition, String order)
        {
            ArrayList tuyenxes = new ArrayList();
            DataTable tb = new DataTable();
            tb = myConnU.Select("TUYEN_XE", columns, condition, order);
            if (tb != null)
                foreach (DataRow r in tb.Rows)
                {
                    TUYENXE tx = new TUYENXE();
                    tx.Ma = (r["matuyenxe"].ToString());
                    tx.Tentuyen = (r["tentuyen"].ToString());
                    tx.Dodai = r["dodai"].ToString();
                    //tx.Diemcuoi = r["diemcuoi"].ToString();
                    tx.Giave = (r["giave"].ToString());
                    tuyenxes.Add(tx);
                }
            return tuyenxes;
        }

        public DataTable KTDH(string dk)
        {
            ArrayList a = new ArrayList();
            DataTable tb = new DataTable();
            tb = myConnU.Select("TUYEN_XE", "DIEU_HANH", "TUYEN_XE.matuyenxe", "DIEU_HANH.matuyenxe", dk);
            return tb;
        }

        public DataTable KTDT(string dk)
        {
            ArrayList a = new ArrayList();
            DataTable tb = new DataTable();
            tb = myConnU.Select("TUYEN_XE", "LAI_XE", "TUYEN_XE.matuyenxe", "LAI_XE.matuyenxe", dk);
            return tb;
        }

        /// <summary>
        /// Đọc dữ liệu từ bảng Loại sách trong CSDL
        /// </summary>
        /// <param name="columns">Danh sách các cột cần đọc, cách nhau bởi dấu phẩy(,)</param>
        /// <param name="condition">Điều kiện đọc</param>
        /// <returns>Danh sách các đối tượng có kiểu dữ liệu là LoaiSach</returns>
        public ArrayList Select(String columns, String condition)
        {
            return this.Select(columns, condition, null);
        }

        /// <summary>
        /// Đọc dữ liệu từ bảng Loại sách trong CSDL
        /// </summary>
        /// <param name="columns">Danh sách các cột cần đọc, cách nhau bởi dấu phẩy(,)</param>
        /// <returns>Danh sách các đối tượng có kiểu dữ liệu là LoaiSach</returns>
        public ArrayList Select(String columns)
        {
            return this.Select(columns, null);
        }
        /// <summary>
        /// Đọc dữ liệu từ bảng Loại sách trong CSDL
        /// </summary>
        /// <returns>Danh sách các đối tượng có kiểu dữ liệu là LoaiSach</returns>
        public ArrayList Select()
        {
            return this.Select("*");
        }

        public String getOrder()
        {
            string strID = myConnU.GetTopDataCell("TUYEN_XE", "matuyenxe");
            string strID1;
            string strID2;
            strID1 = strID.Substring(0, 2);
            strID2 = strID.Substring(2, 5);
            int autoNum = Convert.ToInt32(strID2) + 1;

            if (autoNum < 10)
                return strID1 + "0000" + autoNum;

            else if (autoNum >= 10 && autoNum < 100)
                return strID1 + "000" + autoNum;

            else if (autoNum >= 100 && autoNum < 1000)
                return strID1 + "00" + autoNum;
            else if (autoNum >= 1000 && autoNum < 10000)
                return strID1 + "0" + autoNum;
            else if (autoNum >= 10000 && autoNum < 100000)
                return strID1 + "" + autoNum;

            else
                return "";
        }

        /// <summary>
        /// Thêm vào một loại sách mới
        /// </summary>
        /// <param name="loaiSach">Loại sách cần thêm vào</param>
        /// <returns>Số loại sách đã được thêm</returns>
        public int Insert(TUYENXE tuyenxe)
        {
            ColumnData ma = new ColumnData("matuyenxe", 1, tuyenxe.Ma.ToString());
            ColumnData tentuyen = new ColumnData("tentuyen", 1, tuyenxe.Tentuyen.ToString());
            ColumnData dodai = new ColumnData("dodai", 1, tuyenxe.Dodai.ToString());
            ColumnData giave = new ColumnData("giave", 1, tuyenxe.Giave.ToString());           
            ArrayList columnData = new ArrayList();
            columnData.Add(ma);
            columnData.Add(tentuyen);
            columnData.Add(giave);
            columnData.Add(dodai);
            return myConnU.Insert("TUYEN_XE", columnData);
        }

        /// <summary>
        /// Thêm vào một danh sách các loại sách
        /// </summary>
        /// <param name="loaiSachs">Danh sách các loại sách cần thêm</param>
        /// <returns>Số loại sách đã được thêm</returns>
        public int Insert(ArrayList tuyenxes)
        {
            int count = 0;
            foreach (TUYENXE tx in tuyenxes)
            {
                count += this.Insert(tx);
            }
            return count;
        }

        /// <summary>
        /// Cập nhật thông tin cho một loại sách theo điều kiện
        /// </summary>
        /// <param name="loaiSach">Loại sách được cập nhật thông tin</param>
        /// <param name="condition">Điều kiện cập nhật</param>
        /// <returns>Số loại sách được cập nhật thông tin</returns>
        public int Update(TUYENXE tuyenxe, String condition)
        {
            //ColumnData ma = new ColumnData("ma", 1, tuyenxe.Ma.ToString());
            ColumnData tentuyen = new ColumnData("tentuyen", 1, tuyenxe.Tentuyen.ToString());
            ColumnData giave = new ColumnData("giave", 1, tuyenxe.Giave.ToString());
            ColumnData dodai = new ColumnData("dodai", 1, tuyenxe.Dodai.ToString());
            ArrayList columnDatas = new ArrayList();
            //columnDatas.Add(ma);
            columnDatas.Add(tentuyen);
            columnDatas.Add(giave);
            columnDatas.Add(dodai);
            return myConnU.Update("TUYEN_XE", columnDatas, condition);
        }

        /// <summary>
        /// Cập nhật thông tin cho một danh sách các loại sách
        /// </summary>
        /// <param name="loaiSachs">Danh sách các loại sách cần cập nhật</param>
        /// <param name="condition">Điều kiện cập nhật</param>
        /// <returns>Số loại sách được cập nhật thông tin</returns>
        public int Update(ArrayList tuyenxes, String condition)
        {
            int count = 0;
            foreach (TUYENXE tx in tuyenxes)
            {
                count += this.Update(tx, condition);
            }
            return count;
        }

        /// <summary>
        /// Xóa loại sách theo điều kiện
        /// </summary>
        /// <param name="condition">Điều kiện xóa</param>
        /// <returns>Số loại sách bị xóa</returns>
        public int Delete(String condition)
        {
            return myConnU.Delete("TUYEN_XE", condition);
        }

        /// <summary>
        /// Lấy về mã loại sách lớn nhất trong bảng Loại sách
        /// </summary>
        /// <returns>Mã loại sách lớn nhất</returns>
        public int GetMaxId()
        {
            return myConnU.GetMaxId("TUYEN_XE", "matuyenxe");
        }

    }
}
